<?php

/**
 * Calendar Helper for CakePHP
 *
 * 	Copyright 2008 John Elliott
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 *
 * @author John Elliott
 * @copyright 2008 John Elliott
 * @link http://www.flipflops.org More Information
 * @license			http://www.opensource.org/licenses/mit-license.php The MIT License
 *
 */
class CalendarHelper extends Helper {

    var $helpers = array('Form', 'Html', 'Javascript', 'Ajax', 'Session');

    /**
     * Generates a Calendar for the specified by the month and year params and populates it with the content of the data array
     *
     * @param $year string
     * @param $month string
     * @param $data array
     * @return string HTML code to display calendar in view
     *
     */
    function mensual($year = '', $month = '', $data = '') {
        $str = '';
        $month_list = array('january', 'febuary', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december');
        $month_list_esp = array('Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre');
        $day_list = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
        $day_list_esp = array('L', 'M', 'M', 'J', 'V', 'S', 'D');
        $day = 1;
        $today = 0;

        if ($year == '' || $month == '') {// just use current yeear & month
            $year = date('Y');
            $month = strtolower(date('F'));
        }

        $flag = 0;

        for ($i = 0; $i < 12; $i++) {
            if (strtolower($month) == $month_list[$i]) {
                if (intval($year) != 0) {
                    $flag = 1;
                    $month_num = $i + 1;
                    break;
                }
            }
        }


        if ($flag == 0) {
            $year = date('Y');
            $month = date('F');
            $month_num = date('m');
        }

        $next_year = $year;
        $prev_year = $year;

        $next_month = intval($month_num) + 1;
        $prev_month = intval($month_num) - 1;

        if ($next_month == 13) {
            $next_month = 'january';
            $next_year = intval($year) + 1;
        } else {
            $next_month = $month_list[$next_month - 1];
        }

        if ($prev_month == 0) {
            $prev_month = 'december';
            $prev_year = intval($year) - 1;
        } else {
            $prev_month = $month_list[$prev_month - 1];
        }

        if ($year == date('Y') && strtolower($month) == strtolower(date('F'))) { // set the flag that shows todays date but only in the current month - not past or future...
            $today = date('j');
        }

        $days_in_month = date("t", mktime(0, 0, 0, $month_num, 1, $year));

        $first_day_in_month = date('D', mktime(0, 0, 0, $month_num, 1, $year));


        $str .= '<table class="calendar">';

        $str .= '<thead>';

        $str .= '<tr><th class="cell-prev">';


        $str .= $this->Ajax->link($this->Html->image("/images/ico-ant.gif", array('alt' => 'Mes Anterior', 'title' => 'Mes Anterior')), '/calendarios/mensual/' . $prev_year . '/' . $prev_month, array('update' => 'calendario', 'indicator' => 'cargando', 'escape' => false));

        $str .= '</th><th colspan="5">' . $month_list_esp[$month_num - 1] . ' ' . $year . '</th><th class="cell-next">';

        $str .= $this->Ajax->link($this->Html->image("/images/ico-sig.gif", array('alt' => 'Mes Siguiente', 'title' => 'Mes Siguiente')), '/calendarios/mensual/' . $next_year . '/' . $next_month, array('update' => 'calendario', 'indicator' => 'cargando', 'escape' => false));

        $str .= '</th></tr>';



        $str .= '<tr>';

        for ($i = 0; $i < 7; $i++) {
            $str .= '<th class="cell-header">' . $day_list_esp[$i] . '</th>';
        }

        $str .= '</tr>';

        $str .= '</thead>';




        $str .= '<tbody>';


        while ($day <= $days_in_month) {
            $str .= '<tr>';

            for ($i = 0; $i < 7; $i ++) {
                // Armo el string YYYY-MM-DD
                $txt_fecha = $year . "-" . date("m", mktime(0, 0, 0, $month_num, $day, $year)) . "-" . date("d", mktime(0, 0, 0, $month_num, $day, $year));

                if (isset($data[$txt_fecha])) {
                    $cell = '<img src="/images/ico-barra-vertical.gif" width="2" height="' . ($data[$txt_fecha]) . '" hspace="0">&nbsp;';
                } else {
                    $cell = '&nbsp;';
                }

                $class = '';

                if ($i > 4) {
                    $class = ' class="cell-weekend" ';
                }

                if ($day == $today) {
                    $class = ' class="cell-today" ';
                }


                if (($first_day_in_month == $day_list[$i] || $day > 1) && ($day <= $days_in_month)) {
                    $str .= '<td ' . $class . '><span class="cell-data">' . $cell . '</span><span class="cell-number">' . $this->Ajax->link($day, array('controller' => 'calendarios', 'action' => 'semanal', $year, $month_num, $day), array('update' => 'panel_derecho', 'indicator' => 'cargando')) . '</span></td>';
                    $day++;
                } else {
                    $str .= '<td ' . $class . '>&nbsp;</td>';
                }
            }

            $str .= '</tr>';

            if ($day > 35) {
                break;
            }
        }

        $str .= '</tbody>';

        $str .= '</table>';

        return $str;
    }

    function semanal($anio = null, $mes = null, $dia = null, $id_profesional = null, $data = null, $config_agenda = null, $feriados = null, $nombre_medico = '', $arrLicencias = false) {

        /* ----------------------------------------------------------------------------- */
        /* Obtengo los datos de Config de la Agenda										 */
        /* ----------------------------------------------------------------------------- */

        $horario_comienzo = 1400; // expresado en minutos, por ej. 480 son las 8 hs
        $horario_fin = 0; // expresado en minutos
        $intervalo_horario = 60; // expresados en minutos
        if (!empty($config_agenda)) {
            foreach ($config_agenda AS $indice => $registro) {

                // Convierto la hora de comienzo del Segmento en minutos
                $min_comienzo_segmento = (substr($registro['Segment']['horario_desde'], 0, 2) * 60) + substr($registro['Segment']['horario_desde'], 3, 2);
                $min_fin_segmento = (substr($registro['Segment']['horario_hasta'], 0, 2) * 60) + substr($registro['Segment']['horario_hasta'], 3, 2);


                // Defino el Intervalo minimo de Segmento
                if (!empty($registro['Segment']['duracion']) AND $registro['Segment']['duracion'] < $intervalo_horario) {
                    $intervalo_horario = $registro['Segment']['duracion'];
                }

                // Defino el Horario minimo del Día
                if ($min_comienzo_segmento < $horario_comienzo) {
                    $horario_comienzo = $min_comienzo_segmento;
                }
                if ($min_fin_segmento > $horario_fin) {
                    $horario_fin = $min_fin_segmento;
                }


                $registro_segmento['comienzo_segmento'] = $min_comienzo_segmento;
                $registro_segmento['fin_segmento'] = $min_fin_segmento;
                $registro_segmento['duracion_segmento'] = $registro['Segment']['duracion'];
                $registro_segmento['sobreturno_segmento'] = $registro['Segment']['sobreturno'];
                $registro_segmento['max_sobreturnos'] = $registro['Segment']['max_sobreturnos'];
                $registro_segmento['sobreturnos_dados'] = $registro['Segment']['sobreturnos_dados'];
                
                if($registro_segmento['sobreturnos_dados']>=$registro_segmento['max_sobreturnos']){
                    $registro_segmento['sobreturno_segmento'] = 'N';
                }

                // Si es el primer Segmento del día
                if (empty($arreglo_conf_agenda[$registro['Segment']['day_id']])) {
                    $arreglo_conf_agenda[$registro['Segment']['day_id']] = array();
                }

                array_push($arreglo_conf_agenda[$registro['Segment']['day_id']], $registro_segmento);
            }
        }

        /* ----------------------------------------------------------------------------- */
        /* Obtengo los Feriados de la Semana											 */
        /* ----------------------------------------------------------------------------- */
        if (!empty($feriados)) {
            foreach ($feriados AS $registro) {
                $fecha_mes_dia = substr($registro['Feriado']['fecha'], 5);
                $arreglo_feriados[$fecha_mes_dia] = $registro['Feriado']['name'];
            }
        }

        /* ----------------------------------------------------------------------------- */

        // Defino los parametros generales del calendario semanal
        $day_list_esp = array('Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom');

        $str = "";


        // Defino la Semana de que fecha a que fecha esta definida
        $en_que_dia_de_la_semana_cae = date('w', mktime(0, 0, 0, $mes, $dia, $anio));

        if ($en_que_dia_de_la_semana_cae == 0) { // Si es Domingo
            $semana_comenza = date("j", mktime(0, 0, 0, $mes, $dia - $en_que_dia_de_la_semana_cae, $anio));
            $leyenda_rango_semana = 'Semana del ' . date("d/m/Y", mktime(0, 0, 0, $mes, $dia - 6, $anio)) . ' al ' . date("d/m/Y", mktime(0, 0, 0, $mes, $dia - $en_que_dia_de_la_semana_cae, $anio));
        } else {
            $semana_comenza = date("j", mktime(0, 0, 0, $mes, $dia - $en_que_dia_de_la_semana_cae + 1, $anio));
            $leyenda_rango_semana = 'Semana del ' . date("d/m/Y", mktime(0, 0, 0, $mes, $dia - $en_que_dia_de_la_semana_cae + 1, $anio)) . ' al ' . date("d/m/Y", mktime(0, 0, 0, $mes, $dia - $en_que_dia_de_la_semana_cae + 1 + 6, $anio));
        }

//pr($arrLicencias);

        // Defino el Logo del cliente si existe
        $logo = $this->Session->read('Client.logo');
        if (!empty($logo)) {
            $logo = '/uploads/' . $logo;
        } else {
            $logo = '/images/logo-epicrisis2.png';
        }


        $str .= "
			<!-- <div>
				<div style='float:left; padding: 10px;'><h1>$leyenda_rango_semana</h1></div>
				<div style='float:right; padding: 8px;'><a href=\"javascript:CancelarTurnos(''.$anio.'/'.$mes.'/'.$dia.'\')\" 
					class='link_destacado'>Cancelar los Turnos Seleccionados</a></div>
			</div> -->
			
			<div class='to_print'>
		        <div class='cabeza_print' style='height: 50px;'>
		            <div style='width: 30%; float: left;'><img src='" . $logo . "' style='max-height:40px;'></div>
		            <div style='text-align: right; float: right; color: #000000;'>
		            	<div style='font-size: 120%;'><B>" . __('LISTADO DE TURNOS', true) . "</B></div>
		            	<div>$nombre_medico</div>
		            </div>
		        </div>

			<table class='calendar'>
			<thead>
			  <tr>
				<th class='cell-header'>&nbsp;</th>
		";
//pr($arreglo_conf_agenda);

        // Muestro el encabezado del calendario semanal
        for ($i = 0; $i < 7; $i++) {

            $class = ' class="cell-header" ';

            if ($en_que_dia_de_la_semana_cae == 0) { // Si es Domingo
                $encabezado_dia_semana = date("j", mktime(0, 0, 0, $mes, $dia - 6 + $i, $anio));
                $arreglo_dias[$i] = date("Y-m-d", mktime(0, 0, 0, $mes, $dia - 6 + $i, $anio));
                $arreglo_dias_puro[$i] = date("Ymd", mktime(0, 0, 0, $mes, $dia - 6 + $i, $anio));
                $arreglo_dias_controlador[$i] = date("Y/m/d", mktime(0, 0, 0, $mes, $dia - 6 + $i, $anio));
                $arreglo_mes_dias_feriados[$i] = date("m-d", mktime(0, 0, 0, $mes, $dia - 6 + $i, $anio));

                if ($i == 6) {
                    $class = ' class="cell-today" ';
                }
            } else {
                $encabezado_dia_semana = date("j", mktime(0, 0, 0, $mes, $dia - $en_que_dia_de_la_semana_cae + 1 + $i, $anio));
                $arreglo_dias[$i] = date("Y-m-d", mktime(0, 0, 0, $mes, $dia - $en_que_dia_de_la_semana_cae + 1 + $i, $anio));
                $arreglo_dias_puro[$i] = date("Ymd", mktime(0, 0, 0, $mes, $dia - $en_que_dia_de_la_semana_cae + 1 + $i, $anio));
                $arreglo_dias_controlador[$i] = date("Y/m/d", mktime(0, 0, 0, $mes, $dia - $en_que_dia_de_la_semana_cae + 1 + $i, $anio));
                $arreglo_mes_dias_feriados[$i] = date("m-d", mktime(0, 0, 0, $mes, $dia - $en_que_dia_de_la_semana_cae + 1 + $i, $anio));

                if ($i == ($en_que_dia_de_la_semana_cae - 1)) {
                    $class = ' class="cell-today" ';
                }
            }

            // Si el Dia es Feriado
            if (isset($arreglo_feriados[$arreglo_mes_dias_feriados[$i]])) {
                $class = ' class="cell-dia-feriado" ';
                $detalle_feriado = "<br>" . $arreglo_feriados[$arreglo_mes_dias_feriados[$i]];
            } else {
                $detalle_feriado = "";
            }

            // Si el Día tiene Segmentos, muestro el Checkbox para poder cancelar el día completo
            if (!empty($arreglo_conf_agenda[$i + 1])) {
                $str_checkbox = '<input type="checkbox" id="checkAll_' . ($i + 1) . '" value="' . ($i + 1) . '" onclick="seleccionarTodo(\'' . ($i + 1) . '\')"/>';
            } else {
                $str_checkbox = "";
            }

            $str .= '<th ' . $class . '>' . $str_checkbox . $day_list_esp[$i] . ' ' . $encabezado_dia_semana . $detalle_feriado . '</th>';
        }

        $str .= '
			  </tr>
			</thead>
			<tbody>
		';

        // Muestro los horarios y las celdas a la derecha de los horarios
pr($data);        
        for ($i = $horario_comienzo; $i <= $horario_fin; $i = $i + $intervalo_horario) {

            $str .= '
				  <tr> 
					<td class="cell-horario">' . date("H:i", mktime(0, $i, 0, 0, 0, 0)) . '</td>
			';

            // Cargo la Celda de cada día y horario	

            for ($j = 0; $j < 7; $j++) {

                /* ---------------------------------------------------------------------------- */
                /* Determino cual es el Segmento Actual										  */
                /* ---------------------------------------------------------------------------- */

                $segmento_actual = array();

                if (!empty($arreglo_conf_agenda[$j + 1])) {

                    // Si existe más de un Segmento en el día
                    if (count($arreglo_conf_agenda[$j + 1]) > 1) {

                        for ($indice = 0; $indice < count($arreglo_conf_agenda[$j + 1]); $indice++) {

                            if ($arreglo_conf_agenda[$j + 1][$indice]['comienzo_segmento'] <= $i AND $arreglo_conf_agenda[$j + 1][$indice]['fin_segmento'] >= $i) {
                                $segmento_actual = $arreglo_conf_agenda[$j + 1][$indice];
                                break;
                            }
                        }
                    } else { // Si existe un solo Segmento en el día
                        $segmento_actual = $arreglo_conf_agenda[$j + 1][0];
                    }
                }

                /* ---------------------------------------------------------------------------- */

                // Inicializo la Celda
                $cell = '';
                $class = ' class="cell-header-dia" ';

                if ("$anio-$mes-$dia" == $arreglo_dias[$j]) {
                    //$class = ' class="cell-dia-today" ';
                }

                // Armo el indice para saber si existen datos para el horario especificado
                $fecha_completa_verificar = $arreglo_dias[$j] . " " . date("H:i", mktime(0, $i, 0, 0, 0, 0)) . ":00";
                $fecha_fin = $arreglo_dias[$j] . " " . date("H:i", mktime(0, $i + ($intervalo_horario - 1), 0, 0, 0, 0)) . ":59";
//echo $fecha_completa_verificar.' al '.$fecha_fin.'<br>';
                // Determino si alguna de las fechas a mostrar son anteriores a HOY
                if (strftime($arreglo_dias[$j]) < strftime(date("Y-m-d"))) {
                    $disabledCell = true;
                } else {
                    $disabledCell = false;
                }

                $nombre_div = 'alta_turno_calendario_' . $arreglo_dias_puro[$j] . date("Hi", mktime(0, $i, 0, 0, 0, 0));

                //---------------------------------------------------------------------------
                // Hago un ciclo dentro del array data(contiene todos los turnos de la semana)
                // para ver si alguno esta en el rango de dia/hora que estoy mostrando
                //---------------------------------------------------------------------------
                if (!empty($data)) {
                    foreach ($data as $clave => $valor) {
                        $muestra = false;
                        if ($clave > $fecha_completa_verificar and $clave < $fecha_fin) {
                            if (!isset($data[$fecha_completa_verificar])) {
                                $data[$fecha_completa_verificar] = $valor;
                            } else {
                                $data[$fecha_completa_verificar] = $data[$fecha_completa_verificar] . $valor;
                            }
                        }
                    }
                }

                // Si hay datos para el día y horario, lo muestro
                if (isset($data[$fecha_completa_verificar])) {
//				if($muestra){ 
                    $cell = $data[$fecha_completa_verificar];


                    // Si el Segmento soporta SOBRETURNO
                    if (!empty($segmento_actual) AND $segmento_actual['sobreturno_segmento'] == "S") {
                        if ($disabledCell) {
                            $str .= '<td>' . $cell . '</td>';
                        } else {
                            $str .= '<td ' . $class . ' 
					onmouseover="document.getElementById(\'' . $nombre_div . '\').style.display=\'block\'" 
					onmouseout="document.getElementById(\'' . $nombre_div . '\').style.display=\'none\';">
					' . $cell . '<div id="' . $nombre_div . '" style="display: none;"><a href="javascript:MostrarModal(\'ventana_modal\',\'Carga de Turno\',\'/turns/add/' . $arreglo_dias_controlador[$j] . date("/H/i", mktime(0, $i, 0, 0, 0, 0)) . '/' . $id_profesional . '/S\',440,400)"><br>Sobreturno</a>
					</div></td>';
                        }
                    } else {
                        $str .= '<td ' . $class . '>' . $cell . '</td>';
                    }
                } else { // Si no hay datos para el día y horario, muestro la opcion de alta
                    // Si existe un Segmento para el día
                    if (!empty($segmento_actual)) {
                        
                        // El contenido de cada Celda
                        $contenido = "";

                        // Si el Segmento no esta Habilitdo
                        if ($segmento_actual['comienzo_segmento'] < $i AND $segmento_actual['fin_segmento'] < $i) {
                            $class = ' class="cell-dia-disabled" ';
                            $str .= '<td ' . $class . '>&nbsp;</td>';
                        }
                        if ($segmento_actual['comienzo_segmento'] > $i AND $segmento_actual['fin_segmento'] > $i) {
                            $class = ' class="cell-dia-disabled" ';
                            $str .= '<td ' . $class . '>&nbsp;</td>';
                        }

                        // Si el Segmento esta Habilitdo
                        if ($segmento_actual['comienzo_segmento'] <= $i AND $segmento_actual['fin_segmento'] >= $i) {

                            $nombre_div = 'alta_turno_calendario_' . $arreglo_dias_puro[$j] . date("Hi", mktime(0, $i, 0, 0, 0, 0));

                            if ($disabledCell) {
                                $str .= '<td>' . $cell . '</td>';
                            } else {
                                
                                $fecha_para_licencia = str_replace('/','-',$arreglo_dias_controlador[$j]);
                                $hora_para_licencia = date("H:i", mktime(0, $i, 0, 0, 0, 0));
                                $license_time = false;
                                if(isset($arrLicencias[$fecha_para_licencia])){
                                    $l_desde = $arrLicencias[$fecha_para_licencia]['hora_desde'];
                                    $l_hasta = $arrLicencias[$fecha_para_licencia]['hora_hasta'];
                                    if($hora_para_licencia>=$l_desde && $hora_para_licencia<=$l_hasta){
                                        //echo $fecha_para_licencia.' - '. $hora_para_licencia.'<br>';
                                        $class = substr(trim($class),0,-1);
                                        $class = $class.' licencia" ';
                                        $license_time = true;
                                        $motivo_licencia = substr($arrLicencias[$fecha_para_licencia]['name'],0,15);
                                    }
                                }
                                if( $license_time ){
                                    $str .= '<td ' . $class . ' >' . $cell . $motivo_licencia. ' </td>';
                                } else {
                                    $str .= '<td ' . $class . ' onmouseover="document.getElementById(\'' . $nombre_div . '\').style.display=\'block\'" onmouseout="document.getElementById(\'' . $nombre_div . '\').style.display=\'none\';">' . $cell . '<div id="' . $nombre_div . '" style="display: none;"><a href="javascript:MostrarModal(\'ventana_modal\',\'Carga de Turno\',\'/turns/add/' . $arreglo_dias_controlador[$j] . date("/H/i", mktime(0, $i, 0, 0, 0, 0)) . '/' . $id_profesional . '/N\',440,400)">Nuevo Turno</a></div></td>';                                    
                                }
                                
                            }
                        }
                    } else { // Si no existe un Segmento para el día
                        $class = ' class="cell-dia-disabled" ';
                        $str .= '<td ' . $class . '>&nbsp;</td>';
                    }
                }
            }

            $str .= '
				  </tr>
			';
        }

        $str .= "
			</tbody>
			</table>
			</div> <!-- en to_print -->
			
		";

        return $str;
    }

//end function semanal

    function semanallista($anio = null, $mes = null, $dia = null, $id_profesional = null, $data = null, $config_agenda = null, $feriados = null, $nombre_medico = '', $arrLicencias = false) {

        $fecha_actual = '';
        $color = '#FFF';
        $hora_actual = '';


        // Defino el Logo del cliente si existe
        $logo = $this->Session->read('Client.logo');
        if (!empty($logo)) {
            $logo = '/uploads/' . $logo;
        } else {
            $logo = '/images/logo-epicrisis2.png';
        }


        echo "<div class='to_print'>
		        <div class='cabeza_print' style='height: 50px;'>
		            <div style='width: 30%; float: left;'><img src='" . $logo . "' style='max-height:40px;'></div>
		            <div style='text-align: right; float: right; color: #000000;'>
		            	<div style='font-size: 120%;'><B>" . __('LISTADO DE TURNOS', true) . "</B></div>
		            	<div>$nombre_medico</div>
		            </div>
		        </div>
			";

        if (!empty($data)) {
            $contador_renglon = 1;
            foreach ($data as $clave => $valor) {
                $contador_renglon++;
                $xfecha = explode(' ', $clave);
                list($xanio, $xmes, $xdia) = explode('-', $xfecha[0]);
                $fecha = "$xdia/$xmes/$xanio";


                // Determino el día de la semana
                switch (date('w', mktime(0, 0, 0, $xmes, $xdia, $xanio))) {
                    case "0":
                        $txt_dia_semana = __('Domingo', true);
                        break;
                    case "1":
                        $txt_dia_semana = __('Lunes', true);
                        break;
                    case "2":
                        $txt_dia_semana = __('Martes', true);
                        break;
                    case "3":
                        $txt_dia_semana = __('Miércoles', true);
                        break;
                    case "4":
                        $txt_dia_semana = __('Jueves', true);
                        break;
                    case "5":
                        $txt_dia_semana = __('Viernes', true);
                        break;
                    case "6":
                        $txt_dia_semana = __('Sábado', true);
                        break;
                }

                if ($fecha_actual != $fecha) {

                    $fecha_actual = $fecha;
                    echo "<h1 class='agenda'>$txt_dia_semana, $fecha_actual</h1>";
                }

                if ($hora_actual != $xfecha[1]) {
                    $hora_actual = $xfecha[1];
                }
                $paciente = preg_replace('/<br\\s*?\/??>/i', ' - ', $valor);
                $paciente = preg_replace('/margin-bottom:10px;/', '', $paciente);

                $color = '#FFF';

                //$paciente = strip_tags($paciente);
                echo "<div style='background:$color;border-bottom: 1px solid #E0E0E0;'>";
                echo "<div class='agenda_hora'>" . substr($hora_actual, 0, 5) . "</div>";
                echo "<div class='agenda_pacientes'>$paciente</div>";
                echo "</div>";
            }
        }
        echo "</div>"; // end div to_print
    }

// end function semanallista	

    function diario($anio = null, $mes = null, $dia = null, $id_profesional = null, $data = null, $config_agenda = null, $feriados = null, $nombre_medico = '', $lista = false) {

        /* ----------------------------------------------------------------------------- */
        /* Obtengo los datos de Config de la Agenda										 */
        /* ----------------------------------------------------------------------------- */

        $horario_comienzo = 1400; // expresado en minutos, por ej. 480 son las 8 hs
        $horario_fin = 0; // expresado en minutos
        $intervalo_horario = 60; // expresados en minutos
        if (!empty($config_agenda)) {
            foreach ($config_agenda AS $indice => $registro) {

                // Convierto la hora de comienzo del Segmento en minutos
                $min_comienzo_segmento = (substr($registro['Segment']['horario_desde'], 0, 2) * 60) + substr($registro['Segment']['horario_desde'], 3, 2);
                $min_fin_segmento = (substr($registro['Segment']['horario_hasta'], 0, 2) * 60) + substr($registro['Segment']['horario_hasta'], 3, 2);


                // Defino el Intervalo minimo de Segmento
                if (!empty($registro['Segment']['duracion']) AND $registro['Segment']['duracion'] < $intervalo_horario) {
                    $intervalo_horario = $registro['Segment']['duracion'];
                }

                // Defino el Horario minimo del Día
                if ($min_comienzo_segmento < $horario_comienzo) {
                    $horario_comienzo = $min_comienzo_segmento;
                }
                if ($min_fin_segmento > $horario_fin) {
                    $horario_fin = $min_fin_segmento;
                }


                $registro_segmento['comienzo_segmento'] = $min_comienzo_segmento;
                $registro_segmento['fin_segmento'] = $min_fin_segmento;
                $registro_segmento['duracion_segmento'] = $registro['Segment']['duracion'];
                $registro_segmento['sobreturno_segmento'] = $registro['Segment']['sobreturno'];


                // Si es el primer Segmento del día
                if (empty($arreglo_conf_agenda[$registro['Segment']['day_id']])) {
                    $arreglo_conf_agenda[$registro['Segment']['day_id']] = array();
                }

                array_push($arreglo_conf_agenda[$registro['Segment']['day_id']], $registro_segmento);
            }
        }

        /* ----------------------------------------------------------------------------- */
        /* Obtengo los Feriados de la Semana											 */
        /* ----------------------------------------------------------------------------- */

        if (!empty($feriados)) {
            foreach ($feriados AS $registro) {
                $fecha_mes_dia = substr($registro['Feriado']['fecha'], 5);
                $arreglo_feriados[$fecha_mes_dia] = $registro['Feriado']['name'];
            }
        }

        /* ----------------------------------------------------------------------------- */

        // Defino los parametros generales del calendario semanal
        $day_list_esp = array('Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom');

        $str = "";


        // Defino la Semana de que fecha a que fecha esta definida
        $en_que_dia_de_la_semana_cae = date('w', mktime(12, 0, 0, $mes, $dia, $anio));
        $semana_comenza = date("j", mktime(0, 0, 0, $mes, $dia, $anio));
        $leyenda_rango_semana = 'Semana del ' . date("d/m/Y", mktime(0, 0, 0, $mes, $dia, $anio)) . ' al ' . date("d/m/Y", mktime(0, 0, 0, $mes, $dia, $anio));


        // Defino el Logo del cliente si existe
        $logo = $this->Session->read('Client.logo');
        if (!empty($logo)) {
            $logo = '/uploads/' . $logo;
        } else {
            $logo = '/images/logo-epicrisis2.png';
        }


        $str .= "
			<div class='to_print'>

		        <div class='cabeza_print' style='height: 50px;'>
		            <div style='width: 30%; float: left;'><img src='" . $logo . "' style='max-height:40px;'></div>
		            <div style='text-align: right; float: right; color: #000000;'>
		            	<div style='font-size: 120%;'><B>" . __('LISTADO DE TURNOS', true) . "</B></div>
		            	<div>$nombre_medico</div>
		            </div>
		        </div>

			<table class='calendar'>
			<thead>
			  <tr>
				<th class='cell-header'>&nbsp;</th>
		";

        // Muestro el encabezado del calendario diario

        $i = $en_que_dia_de_la_semana_cae;
        $class = ' class="cell-header" ';
        // Si el Día tiene Segmentos, muestro el Checkbox para poder cancelar el día completo
        if (!empty($arreglo_conf_agenda[$i])) {
            $str_checkbox = '<input type="checkbox" style="width:30px;" id="checkAll_' . ($i) . '" value="' . ($i) . '" onclick="seleccionarTodo(\'' . ($i) . '\')"/>';
        } else {
            $str_checkbox = "";
        }
        $encabezado_dia_semana = date("j", mktime(0, 0, 0, $mes, $dia, $anio));
        $str .= '<th ' . $class . '>' . $str_checkbox . $day_list_esp[$i - 1] . ' ' . $encabezado_dia_semana . '</th>';


        $str .= '
			  </tr>
			</thead>
			<tbody>
		';

        // Muestro los horarios y las celdas a la derecha de los horarios
        for ($i = $horario_comienzo; $i <= $horario_fin; $i = $i + $intervalo_horario) {

            $str .= '
				  <tr> 
					<td class="cell-horario" style="width:80px;">' . date("H:i", mktime(0, $i, 0, 0, 0, 0)) . '</td>
			';

            // Cargo la Celda de cada día y horario	


            $j = $en_que_dia_de_la_semana_cae;

            /* ---------------------------------------------------------------------------- */
            /* Determino cual es el Segmento Actual										  */
            /* ---------------------------------------------------------------------------- */

            $segmento_actual = array();

            if (!empty($arreglo_conf_agenda[$j])) {

                // Si existe más de un Segmento en el día
                if (count($arreglo_conf_agenda[$j]) > 1) {

                    for ($indice = 0; $indice < count($arreglo_conf_agenda[$j]); $indice++) {

                        if ($arreglo_conf_agenda[$j][$indice]['comienzo_segmento'] <= $i AND $arreglo_conf_agenda[$j][$indice]['fin_segmento'] >= $i) {
                            $segmento_actual = $arreglo_conf_agenda[$j][$indice];
                            break;
                        }
                    }
                } else { // Si existe un solo Segmento en el día
                    $segmento_actual = $arreglo_conf_agenda[$j][0];
                }
            }

            /* ---------------------------------------------------------------------------- */


            $arreglo_dias[$j] = "$anio-$mes-$dia";
            // Inicializo la Celda
            $cell = '';
            $class = ' class="cell-header-dia" ';

            if ("$anio-$mes-$dia" == $arreglo_dias[$j]) {
                //$class = ' class="cell-dia-today" ';
            }

            // Armo el indice para saber si existen datos para el horario especificado
            $fecha_completa_verificar = $arreglo_dias[$j] . " " . date("H:i", mktime(0, $i, 0, 0, 0, 0)) . ":00";
            $fecha_fin = $arreglo_dias[$j] . " " . date("H:i", mktime(0, $i + ($intervalo_horario - 1), 0, 0, 0, 0)) . ":59";

            // Determino si alguna de las fechas a mostrar son anteriores a HOY
            if (strftime($arreglo_dias[$j]) < strftime(date("Y-m-d"))) {
                $disabledCell = true;
            } else {
                $disabledCell = false;
            }

            $nombre_div = 'alta_turno_calendario_' . $arreglo_dias[$j] . date("Hi", mktime(0, $i, 0, 0, 0, 0));

            //---------------------------------------------------------------------------
            // Hago un ciclo dentro del array data(contiene todos los turnos de la semana)
            // para ver si alguno esta en el rango de dia/hora que estoy mostrando
            //---------------------------------------------------------------------------
            if (!empty($data)) {
                foreach ($data as $clave => $valor) {
                    $muestra = false;
                    if ($clave > $fecha_completa_verificar and $clave < $fecha_fin) {
                        if (!isset($data[$fecha_completa_verificar])) {
                            $data[$fecha_completa_verificar] = $valor;
                        } else {
                            $data[$fecha_completa_verificar] = $data[$fecha_completa_verificar] . $valor;
                        }
                    }
                }
            }

            // Si hay datos para el día y horario, lo muestro
            if (isset($data[$fecha_completa_verificar])) {
//				if($muestra){ 
                $cell = $data[$fecha_completa_verificar];


                // Si el Segmento soporta SOBRETURNO
                if (!empty($segmento_actual) AND $segmento_actual['sobreturno_segmento'] == "S") {


                    if ($disabledCell) {
                        $str .= '<td>' . $cell . '</td>';
                    } else {
                        $str .= '<td ' . $class . ' style="width:500px;"
									onmouseover="document.getElementById(\'' . $nombre_div . '\').style.display=\'block\'" 
									onmouseout="document.getElementById(\'' . $nombre_div . '\').style.display=\'none\';">
									' . $cell . '<div id="' . $nombre_div . '" style="display: none;">
									<a href="javascript:MostrarModal(\'ventana_modal\',\'Carga de Turno\',\'/turns/add/' . $anio . '/' . $mes . '/' . $dia . date("/H/i", mktime(0, $i, 0, 0, 0, 0)) . '/' . $id_profesional . '/S\',440,400)"><br>Sobreturno</a>
									</div></td>';
                    }
                } else {
                    $str .= '<td ' . $class . ' style="width:500px;">' . $cell . '</td>';
                }
            } else { // Si no hay datos para el día y horario, muestro la opcion de alta
                // Si existe un Segmento para el día
                if (!empty($segmento_actual)) {
                    // El contenido de cada Celda
                    $contenido = "";

                    // Si el Segmento no esta Habilitdo
                    if ($segmento_actual['comienzo_segmento'] < $i AND $segmento_actual['fin_segmento'] < $i) {
                        $class = ' class="cell-dia-disabled" ';
                        $str .= '<td ' . $class . ' style="width:500px;">&nbsp;</td>';
                    }
                    if ($segmento_actual['comienzo_segmento'] > $i AND $segmento_actual['fin_segmento'] > $i) {
                        $class = ' class="cell-dia-disabled" ';
                        $str .= '<td ' . $class . ' style="width:500px;">&nbsp;</td>';
                    }

                    // Si el Segmento esta Habilitdo
                    if ($segmento_actual['comienzo_segmento'] <= $i AND $segmento_actual['fin_segmento'] >= $i) {

                        $nombre_div = 'alta_turno_calendario_' . $arreglo_dias[$j] . date("Hi", mktime(0, $i, 0, 0, 0, 0));

                        if ($disabledCell) {
                            $str .= '<td style="width:500px;">' . $cell . '</td>';
                        } else {
                            $str .= '<td ' . $class . ' style="width:500px;" onmouseover="document.getElementById(\'' . $nombre_div . '\').style.display=\'block\'" onmouseout="document.getElementById(\'' . $nombre_div . '\').style.display=\'none\';">' . $cell . '<div id="' . $nombre_div . '" style="display: none;"><a href="javascript:MostrarModal(\'ventana_modal\',\'Carga de Turno\',\'/turns/add/' . $anio . '/' . $mes . '/' . $dia . date("/H/i", mktime(0, $i, 0, 0, 0, 0)) . '/' . $id_profesional . '/N\',440,400)">Nuevo Turno</a></div></td>';
                        }
                    }
                } else { // Si no existe un Segmento para el día
                    //$class = ' class="cell-dia-disabled" ';
                    //$str .= '<td '.$class.'>&nbsp;</td>';
                }
            }
//			} //endfor

            $str .= '
				  </tr>
			';
        }

        $str .= "
			</tbody>
			</table>
			</div> <!-- en to_print -->
			
		";

        return $str;
    }

//end function diario cal

    function diariolista($anio = null, $mes = null, $dia = null, $id_profesional = null, $data = null, $config_agenda = null, $feriados = null, $nombre_medico = '', $lista = false) {

        $fecha_actual = '';
        $color = '#FFF';
        $hora_actual = '';

        // Defino el Logo del cliente si existe
        $logo = $this->Session->read('Client.logo');
        if (!empty($logo)) {
            $logo = '/uploads/' . $logo;
        } else {
            $logo = '/images/logo-epicrisis2.png';
        }


        echo "<div class='to_print'>
		        <div class='cabeza_print' style='height: 50px;'>
		            <div style='width: 30%; float: left;'><img src='" . $logo . "' style='max-height:40px;'></div>
		            <div style='text-align: right; float: right; color: #000000;'>
		            	<div style='font-size: 120%;'><B>" . __('LISTADO DE TURNOS', true) . "</B></div>
		            	<div>$nombre_medico</div>
		            </div>
		        </div>	        
			";




        if (!empty($data)) {
            foreach ($data as $clave => $valor) {
                $xfecha = explode(' ', $clave);
                list($xanio, $xmes, $xdia) = explode('-', $xfecha[0]);
                $fecha = "$xdia/$xmes/$xanio";

                // Determino el día de la semana
                switch (date('w', mktime(0, 0, 0, $xmes, $xdia, $xanio))) {
                    case "0":
                        $txt_dia_semana = __('Domingo', true);
                        break;
                    case "1":
                        $txt_dia_semana = __('Lunes', true);
                        break;
                    case "2":
                        $txt_dia_semana = __('Martes', true);
                        break;
                    case "3":
                        $txt_dia_semana = __('Miércoles', true);
                        break;
                    case "4":
                        $txt_dia_semana = __('Jueves', true);
                        break;
                    case "5":
                        $txt_dia_semana = __('Viernes', true);
                        break;
                    case "6":
                        $txt_dia_semana = __('Sábado', true);
                        break;
                }


                if ($fecha_actual != $fecha) {
                    $fecha_actual = $fecha;
                    echo "<h1 class='agenda'>$txt_dia_semana, $fecha_actual</h1>";
                }

                if ($hora_actual != $xfecha[1]) {
                    $hora_actual = $xfecha[1];
                }
                $paciente = preg_replace('/<br\\s*?\/??>/i', ' - ', $valor);
                $paciente = preg_replace('/margin-bottom:10px;/', '', $paciente);

                $color = '#FFF';

                //$paciente = strip_tags($paciente);
                echo "<div style='background:$color;border-bottom: 1px solid #E0E0E0;'>";
                echo "<div class='agenda_hora'>" . substr($hora_actual, 0, 5) . "</div>";
                echo "<div class='agenda_pacientes'>$paciente</div>";
                echo "</div>";
            }
        }
        echo "</div>"; // end div to_print
    }

// end function diario lista
}

?>
